# sum=0
# for i in range(1,10):
#     if i%3==0:
#         break
#     sum+=i
#     else:
#     print("i=",i)
# print(sum)

# 4.1列表
# a_list=[1,2,3,4,5]
# print(a_list[0])
# print(a_list[1])
# print(a_list[2])
# print(a_list[3])
# print(a_list[4])

# a_list=list(range(2,10))
# print(a_list)
# print(a_list[6])
# print(a_list[-2])
# print(a_list[-3:])
# print(a_list[:-3])
# print(a_list[1:-3])
# print(a_list[1:-3:2])
# print(a_list[::2])
# print(a_list[::-1])
# # 4.2列表的切片
# a_list=list(range(1,10))
# a_list[2]="ABC"
# print(a_list)
# a_list[4]=["A","B","C"]
# print(a_list)

# 创建一个包含1到9的列表
# a_list = list(range(1, 10))
# # 将a_list中索引为1,3,5的元素分别替换为15,20,25
# a_list[1:6:2] = [15, 20, 25] ##1～6 不包含索引为6的元素
# # 输出修改后的列表
# print(a_list)
# 这段代码使用列表推导式生成了一个包含1到9的平方的列表
# i*i 表示i的平方，i从1到9（不包括10）
# a_list = [i*i for i in range(1, 10)]
# print(a_list)  # 输出：[1, 4, 9, 16, 25, 36, 49, 64, 81]

# b_list=[i for i in range(50) if i%2==0]
# print(b_list)


##----------------------------------------------------  ----------------------------------------------------
#4.2元组
# a_tuple=tuple(range(1,10))
# print(a_tuple)

# b_tuple=a_tuple[1:5]
# print(b_tuple)

# c_tuple=a_tuple[1:5:2]
# print(c_tuple)

# d_tuple=a_tuple[::-1]
# print(d_tuple)

##生成器推导式

# a_tuple=(i*i for i in range(1,10))
# print(a_tuple)
# print(a_tuple.__next__())
# print(next(a_tuple))
# for item in a_tuple:
#     print(item)
# 解释：
# a_tuple = (i*i for i in range(1,10)) 这行代码创建了一个生成器对象，而不是元组。
# print(a_tuple) 输出的是生成器对象的内存地址，如 <generator object ...>，而不是具体的数值。
# print(a_tuple.__next__()) 会输出生成器的第一个元素，即1*1=1，并将生成器的指针向后移动一位。
# print(next(a_tuple)) 会输出生成器的下一个元素，即2*2=4，再次将指针向后移动。
# for item in a_tuple: 会继续遍历生成器剩下的元素（从3*3=9开始），直到生成器耗尽。
# 由于生成器是惰性求值且一次性遍历的，前面用__next__()和next()已经取走了前两个元素，
# for循环只会输出剩下的平方数（9, 16, 25, 36, 49, 64, 81）。


##----------------------------------------------------  ----------------------------------------------------
#4.3字符串
# #删除字符串里相同字母
# str1="hello ximalaya"
# str2=[]
# for c in str1:
#   if c not in str2:
#     str2.append(c)
# print(str2)
# print("".join(str2))

# c_dict=dict.fromkeys("ABC")
# print(c_dict)

##lambda表达式
# lambda_fun = lambda x: x * 3
# print(lambda_fun(5))      # 输出10，因为5*2=10
# print(lambda_fun("5"))    # 输出555

# 解释：
# lambda_fun("5") 实际上等价于 "5" * 2。
# 在Python中，字符串乘以一个整数n，会将该字符串重复n次。
# 所以 "5" * 2 的结果是 "55"（字符串"5"重复两次）。
# 这里的“+”不是数学加法，而是字符串拼接的含义。
# 具体过程如下：
#   第一步，"5" * 2 表示将字符串"5"重复2次。
#   第二步，重复后得到的结果是把两个"5"拼接在一起，也就是"5" + "5"，最终结果为"55"。
# 这里的“+”只是为了说明拼接过程，实际上Python内部直接完成了字符串的重复操作，并没有真正执行加法运算。

## map（）函数 map(func,iterable)
# def map_func(x):
#     return x*2
# result =map(map_func,(10,"A",12.7))
# print(tuple(result))

# result=map(lambda x:x*3,(10,"A",12.7))
# print(tuple(result))


# widths=[8,6,4,5]
# heights=(9,5,4,3)
# result=map(lambda w,h:w*h,widths,heights)
# print(list(result))
# ##filter(func,iterable)
# words=["hello","world","ximalaya","are"]
# result=filter(lambda x:len(x)>=5,words)
# print(list(result))

test=filter(lambda x:x>5,range(10))
print(list(test))

test=lambda x,y=5,z=8:x+y+z
print(test(2))

# 创建一个包含0到9的整数列表
x = list(range(10))  
# 此时x的值为：[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

# 使用切片x[::3]，表示从x的第0个元素开始，每隔3个元素取一个（即x[0], x[3], x[6], x[9]）
# 将这些位置的元素替换为map(lambda y: y**2, [1,2,3,4])的结果
# 其中map(lambda y: y**2, [1,2,3,4])会对[1,2,3,4]中的每个元素y进行平方，得到[1, 4, 9, 16]
x[::3] = map(lambda y: y**2, [1, 2, 3, 4])  

# 打印替换后的x列表
print(x)